/**
 * 模拟获取火山引擎对象存储 STS 临时凭证的 API
 * 实际项目中，这部分应该在后端实现，避免密钥泄露
 */
import { Request, Response } from 'express';
import { mock } from 'mockjs';

/**
 * STS 临时凭证接口
 */
export interface STSTokenResponse {
  AccessKeyId: string;
  SecretAccessKey: string;
  SessionToken: string;
  ExpiredTime: string;
  StatusCode: number;
  RequestId: string;
}

/**
 * 模拟获取 STS 临时凭证
 * 
 * 注意：实际项目中，这部分逻辑应该在后端实现
 * 后端应该调用火山引擎 STS 服务获取临时凭证，然后返回给前端
 * 参考文档：https://www.volcengine.com/docs/508/65938
 */
export default {
  'GET /api/sts-token': (req: Request, res: Response) => {
    // 模拟 STS 临时凭证
    // 实际项目中，这部分应该调用火山引擎 STS 服务获取
    const now = new Date();
    // 设置过期时间为1小时后
    const expiredTime = new Date(now.getTime() + 60 * 60 * 1000);
    
    const result: STSTokenResponse = {
      AccessKeyId: mock('@string("lower", 20)'),
      SecretAccessKey: mock('@string(32)'),
      SessionToken: mock('@string(100)'),
      ExpiredTime: expiredTime.toISOString(),
      StatusCode: 200,
      RequestId: mock('@guid'),
    };
    
    // 模拟网络延迟
    setTimeout(() => {
      res.status(200).json(result);
    }, 500);
  },
};

/**
 * 实际后端实现参考（Node.js）：
 * 
 * ```javascript
 * const axios = require('axios');
 * const crypto = require('crypto');
 * 
 * // 火山引擎 API 密钥（请替换为实际值）
 * const accessKeyId = 'YOUR_ACCESS_KEY_ID';
 * const secretAccessKey = 'YOUR_SECRET_ACCESS_KEY';
 * 
 * // STS 服务配置
 * const host = 'sts.volces.com';
 * const region = 'cn-beijing';
 * const version = '2018-08-01';
 * const action = 'AssumeRole';
 * 
 * // 角色配置
 * const roleArn = 'YOUR_ROLE_ARN'; // 角色ARN
 * const roleSessionName = 'web-upload-session'; // 会话名称
 * const durationSeconds = 3600; // 凭证有效期，单位秒
 * 
 * // 生成签名
 * function generateSignature(stringToSign, secretKey) {
 *   return crypto
 *     .createHmac('sha256', secretKey)
 *     .update(stringToSign)
 *     .digest('base64');
 * }
 * 
 * // 获取 STS 临时凭证
 * async function getSTSToken(req, res) {
 *   try {
 *     const timestamp = new Date().toISOString().replace(/\..+/, 'Z');
 *     const nonce = Math.random().toString(36).substring(2, 15);
 *     
 *     // 构建请求参数
 *     const params = {
 *       Action: action,
 *       Version: version,
 *       Region: region,
 *       RoleArn: roleArn,
 *       RoleSessionName: roleSessionName,
 *       DurationSeconds: durationSeconds,
 *       AccessKeyId: accessKeyId,
 *       Timestamp: timestamp,
 *       SignatureMethod: 'HMAC-SHA256',
 *       SignatureVersion: '1.0',
 *       SignatureNonce: nonce,
 *     };
 *     
 *     // 构建签名字符串
 *     const paramsSorted = Object.keys(params).sort().map(key => {
 *       return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;
 *     }).join('&');
 *     
 *     const stringToSign = `GET\n${host}\n/\n${paramsSorted}`;
 *     const signature = generateSignature(stringToSign, secretAccessKey);
 *     
 *     // 发送请求
 *     const response = await axios.get(`https://${host}`, {
 *       params: {
 *         ...params,
 *         Signature: signature,
 *       },
 *     });
 *     
 *     // 返回临时凭证
 *     res.status(200).json(response.data);
 *   } catch (error) {
 *     console.error('获取STS临时凭证失败:', error);
 *     res.status(500).json({ error: '获取STS临时凭证失败' });
 *   }
 * }
 * ```
 */